package code.whmmm.util.simple;

import lombok.extern.slf4j.Slf4j;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * SimpleDateFormat 有线程安全问题！不要使用此类。 <br/>
 * <p><b>
 * 过时的，请使用 {@link TimeFormatter} ！
 * </b></p>
 * <br/>
 * 创建时间: 2019/10/6 10:30
 *
 * @author Zero
 */
@Slf4j
@Deprecated
public class DatePattern {

    public enum Format {

        /**
         * 格式化示例 2019-10-01,
         */
        STD_DATE("yyyy-MM-dd"),
        /**
         * yyyy-MM-dd HH:mm:ss
         */
        STD_DATETIME("yyyy-MM-dd HH:mm:ss"),
        /**
         * yyyy-MM
         */
        STD_MONTH("yyyy-MM"),
        /**
         * yyyy
         */
        STD_YEAR("yyyy"),
        /**
         * yyyyMMdd HH:mm:ss
         */
        DATETIME(DATETIME_PATTERN),
        /**
         * yyyyMMdd
         */
        DAY(DAY_PATTERN),
        /**
         * yyyyMM
         */
        MONTH(MONTH_PATTERN),
        /**
         * yyyy
         */
        YEAR(YEAR_PATTERN);

        private SimpleDateFormat format;

        Format(String pattern) {
            format = new SimpleDateFormat(pattern);
        }

        /**
         * 获取 format 对象
         *
         * @return
         */
        public SimpleDateFormat getDateFormat() {
            return format;
        }


        public Date parse(String d) {
            if (StrUtil.isBlank(d)) {
                return null;
            }
            try {
                return format.parse(d);
            } catch (ParseException e) {
                log.error("字符串解析成时间对象失败: " + d + "," + e.getMessage(), e);
                return null;
            }
        }

        public String format(Date d) {
            if (d == null) {
                return null;
            }
            return format.format(d);
        }
    }

    private DatePattern() {
    }

    public static final String DATETIME_PATTERN = "yyyyMMdd HH:mm:ss";

    public static final String DAY_PATTERN = "yyyyMMdd";

    public static final String MONTH_PATTERN = "yyyyMM";

    public static final String YEAR_PATTERN = "yyyy";

}
